package cl.kts.dc.pantallas;

import cl.kts.dc.DetencionCiudadana;
import cl.kts.dc.actor.AbuelaActor;
import cl.kts.dc.actor.BuenoActor;
import cl.kts.dc.interfaces.Personaje;
import cl.kts.dc.interfaces.Personaje.Estado;
import cl.kts.dc.util.Constantes;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.InputListener;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Cell;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.Label.LabelStyle;
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
import com.badlogic.gdx.scenes.scene2d.ui.SelectBox;
import com.badlogic.gdx.scenes.scene2d.ui.SelectBox.SelectBoxStyle;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton.TextButtonStyle;

/**
 *
 * @author Francisco
 */
public class MenuPersonajes implements Screen {

	Texture fondoTexture;
	final DetencionCiudadana game;

	TextButtonStyle estiloBoton;

	TextButton iniJuegoBoton;

	OrthographicCamera camera;

	private Stage stage;
	private Table container;
	private Skin skin;

	private Personaje personajeSeleccionado;
	private Label descripcion;
	LabelStyle ls = new LabelStyle();

	private BuenoActor bueno;
	private BuenoActor buenoClon;
	private AbuelaActor abuela;
	private AbuelaActor abuelaClon;
	private Table table;

	public MenuPersonajes(final DetencionCiudadana gam) {
		fondoTexture = new Texture("menujugadores.jpg");
		game = gam;
		camera = new OrthographicCamera();
		camera.setToOrtho(false, 800, 480);

		estiloBoton = new TextButtonStyle();
		estiloBoton.fontColor = Color.YELLOW;
		estiloBoton.font = new BitmapFont();

		ls = new LabelStyle();
		ls.fontColor = Color.WHITE;
		ls.font = new BitmapFont();

		iniJuegoBoton = new TextButton("Siguiente", estiloBoton);
		iniJuegoBoton.addListener(new InputListener() {
			@Override
			public boolean touchDown(InputEvent event, float x, float y,
					int pointer, int button) {
				siguientePantalla();
				return true;
			}
		});

		bueno = new BuenoActor(Estado.presentandose);
		abuela = new AbuelaActor(Estado.presentandose);
		
		personajeSeleccionado = bueno;

		Actor actor1= bueno.getImagenPresentacion();
		Actor actor2= abuela.getImagenPresentacion();
		
		actor1.addListener(new InputListener() {
			@Override
			public boolean touchDown(InputEvent event, float x, float y,
					int pointer, int button) {
				switchPersonaje(bueno);
				return true;
			}

		});

		actor2.addListener(new InputListener() {
			@Override
			public boolean touchDown(InputEvent event, float x, float y,
					int pointer, int button) {
				switchPersonaje(abuela);
				return true;
			}
		});

		table = new Table();

		table.add(new Label("Selecciona un personaje", ls)).colspan(0)
				.width(100);
		table.row();
		table.add(actor1).width(100).height(100);
		table.add(actor2).width(100).height(100);
		table.row();
		table.add(bueno).width(200).height(200);
		descripcion = new Label(bueno.getDescripcion(), ls);
		descripcion.setWrap(true);

		table.add(descripcion).width(200);
		table.row();
		table.add();
		table.add(iniJuegoBoton).width(200);

		table.setFillParent(true);
		//table.debug();

		stage = new Stage();
		stage.clear();
		Gdx.input.setInputProcessor(stage);

		stage.addActor(table);
	}

	private void switchPersonaje(Personaje nuevoPersonaje) {

		Cell<Personaje> cella = table.getCell(personajeSeleccionado);
		cella.setActor(nuevoPersonaje);

		personajeSeleccionado = nuevoPersonaje;
		descripcion.setText(nuevoPersonaje.getDescripcion());
	}

	@Override
	public void render(float delta) {

		Gdx.gl.glClearColor(0, 0, 0.2f, 1);
		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

		camera.update();
		game.batch.setProjectionMatrix(camera.combined);

		game.batch.begin();
		game.batch.draw(fondoTexture, 0, 0, Constantes.ANCHO_MAXIMO,
				Constantes.ALTO_MAXIMO);

		game.batch.end();
		stage.draw();

	}

	private void siguientePantalla() {

		personajeSeleccionado.restablecerTamanio();
		game.setScreen(new MenuEscenario(game, personajeSeleccionado));
		dispose();
	}

	@Override
	public void show() {
	}

	@Override
	public void resize(int width, int height) {
	}

	@Override
	public void pause() {
	}

	@Override
	public void resume() {
	}

	@Override
	public void hide() {

	}

	@Override
	public void dispose() {
		fondoTexture.dispose();
		stage.dispose();

	}

}
